{
 "cells": [
  {
   "cell_type": "raw",
   "metadata": {
    "raw_mimetype": "text/restructuredtext"
   },
   "source": [
    ".. _nb_nsga2:"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## NSGA-II"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The algorithm is implemented based on <cite data-cite=\"nsga2\"></cite> [\\[benchmark\\]](https://www.egr.msu.edu/coinlab/blankjul/pymoo-benchmark/nsga2.html) [\\[data\\]](https://www.egr.msu.edu/coinlab/blankjul/pymoo-benchmark/nsga2.zip)\n",
    ". A benchmark of the algorithm against the original C code can be found \n",
    "The algorithm follows the general\n",
    "outline of a genetic algorithm with a modified mating and survival selection. In NSGA-II, first, individuals\n",
    "are selected frontwise. By doing so, there will be the situation where a front needs to be split because not all individuals are allowed to survive. In this splitting front, solutions are selected based on crowding distance. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div style=\"display: block;margin-left: auto;margin-right: auto;width: 80%;\">\n",
    "![nsga2_survival](../resources/images/nsga2_survival.png)\n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "The crowding distance is basically the Manhatten Distance in the objective space. However, the extreme points are desired to be kept every generation and, therefore, get assigned a crowding distance of infinity."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div style=\"display: block;margin-left: auto;margin-right: auto;width: 50%;\">\n",
    "![nsga2_crowding](../resources/images/nsga2_crowding.png)\n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Furthermore, to increase some selection pressure NSGA-II uses a binary tournament mating selection. Each individual is first compared by rank and then crowding distance. There also exists a variant in the original C code where instead of using the rank the domination criterium between two solutions is used."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Example"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "code": "algorithms/usage_nsga2.py"
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "image/png": {
       "height": 372,
       "width": 498
      },
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from pymoo.algorithms.nsga2 import NSGA2\n",
    "from pymoo.factory import get_problem\n",
    "from pymoo.optimize import minimize\n",
    "from pymoo.visualization.scatter import Scatter\n",
    "\n",
    "problem = get_problem(\"zdt1\")\n",
    "\n",
    "algorithm = NSGA2(pop_size=100)\n",
    "\n",
    "res = minimize(problem,\n",
    "               algorithm,\n",
    "               ('n_gen', 200),\n",
    "               seed=1,\n",
    "               verbose=False)\n",
    "\n",
    "plot = Scatter()\n",
    "plot.add(problem.pareto_front(), plot_type=\"line\", color=\"black\", alpha=0.7)\n",
    "plot.add(res.F, color=\"red\")\n",
    "plot.show()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Moreover, we can customize NSGA-II to solve a problem with binary decision variable, for example ZDT5."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "code": "algorithms/usage_nsga2_binary.py"
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "image/png": {
       "height": 375,
       "width": 498
      },
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from pymoo.algorithms.nsga2 import NSGA2\n",
    "from pymoo.factory import get_problem, get_sampling, get_crossover, get_mutation\n",
    "from pymoo.optimize import minimize\n",
    "from pymoo.visualization.scatter import Scatter\n",
    "\n",
    "problem = get_problem(\"zdt5\")\n",
    "\n",
    "algorithm = NSGA2(pop_size=100,\n",
    "                  sampling=get_sampling(\"bin_random\"),\n",
    "                  crossover=get_crossover(\"bin_two_point\"),\n",
    "                  mutation=get_mutation(\"bin_bitflip\"),\n",
    "                  eliminate_duplicates=True)\n",
    "\n",
    "res = minimize(problem,\n",
    "               algorithm,\n",
    "               ('n_gen', 500),\n",
    "               seed=1,\n",
    "               verbose=False)\n",
    "\n",
    "\n",
    "Scatter().add(res.F).show()\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### API"
   ]
  },
  {
   "cell_type": "raw",
   "metadata": {
    "raw_mimetype": "text/restructuredtext"
   },
   "source": [
    ".. autoclass:: pymoo.algorithms.nsga2.NSGA2\n",
    "    :noindex:"
   ]
  }
 ],
 "metadata": {
  "celltoolbar": "Raw Cell Format",
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
